package org.budo.jdbc.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import org.budo.support.dao.page.Page;

/**
 * @author lmw
 */
public interface BudoJdbcDao {
    /**
     * 执行查询，用ResultSetHandler处理结果并返回
     */
    <T> T executeQuery(String sql, Object[] parameters, ResultSetHandler<T> resultSetHandler);

    /**
     * 执行查询，用ResultSetHandler处理结果并返回
     */
    <T> T executeQuery(String sql, Map<String, Object> parameters, ResultSetHandler<T> resultSetHandler);

    /**
     * 执行查询，返回一个Int
     */
    <T> T findBySql(Class<T> type, String sql, Object[] parameters);

    /**
     * @return 返回自增主键
     */
    Serializable insert(Class<?> entityType, Object entity);

    <T> List<T> listBySql(Class<T> entityType, String sql, Object[] parameters, Page page);

    /**
     * 执行查询，返回一个Int
     */
    Integer findIntegerBySql(String sql, Object[] parameters);

    Integer findIntegerBySql(String sql, Map<String, Object> parameters);

    /**
     * 执行更新，返回条数
     */
    Integer executeUpdate(String sql, Object[] parameters);

    /**
     * 执行更新，返回条数
     */
    Integer executeUpdate(String sql, Map<String, Object> parameters);
}